3.Global Illumination 您所在的位置:网站首页 unity 环境光 反射 质量 3.Global Illumination

3.Global Illumination

#3.Global Illumination| 来源: 网络整理| 查看: 265

说好的放弃呢,还是搞了几天搞了一个大概。为啥会继续这部分呢?思考哈:灯光-->灯光渲染-->灯光优化-->Draw Call & FPS & Shadow casters & Batches & Verts --> 游戏优化;按照这条路线思考下来;Unity的优化也是一个值得学习和研究的地方。所以还是打算把Unity(基于Unity 2018.2.5f1)的GI(Global Illumination)部分学习一个大概,不求特别了解,但是得掌握个7788哈。GI = 直接光照+间接光照+环境光+反射光。按照惯例来一个~~

“官方吐槽”

Lighting 概述:照明窗口(菜单: Window > Lighting > Settings)是Unity Global Illumination(GI)功能的主要控制面板。虽然Unity中的GI在默认设置下效果很好,但是光照窗口的属性允许你调整GI进程的很多方面来定制你的场景或者根据你的需要优化质量、速度和存储空间。 照明窗口的控件分为三个选项卡:

Scene:设置适用于整个场景,而不是单个的游戏对象。这些设置控制灯光效果和优化选项。 Global Maps:显示GI lighting过程生成的所有lightmap资产文件。 Object Maps:显示了当前选中游戏对象的GI lightmap纹理(包括阴影遮罩)预览。 注意:在窗口显示最下面有一个Auto Generate(自动渲染)的框,如果勾选,Unity将在编辑场景时更新lightmap数据。如果您想在不清除GI缓存的情况下清除场景中烤好的数据,请使用Generate Lighting按钮。 “Scene区域” “Environment”

Environment 1.Skybox Material:天空盒材质;Skybox是一种材质,在场景中出现在一切事物背后的用来模拟天空或遥远天边的背景。 2.Sun Source:太阳源;在使用Skybox的过程中,使用一个带有directional Light组件的Gameobject来指定“太阳”的方向(或在场景中大型而远距离的光源)。如果设置为None(默认值),则假定场景中最亮的directional light代表太阳。 3.Environment Lighting(这些设置会影响来自远处环境的光线,可以理解为漫反射)

Source:漫射环境光(也称为环境光)是存在于场景周围的光并且不来自于特定的光源(也就是说没有特定的发光源)。使用这个参数定义漫反射光颜色,默认是Skybox(也就是反射Skybox的颜色)。 Color:为场景中的所有环境光使用平面颜色。 Gradient:渐变;为来自天空、地平线和地面的环境光选择单独的颜色,并在它们之间平滑地混合。 Skybox :此选项使用skybox的颜色(如果skybox材质指定的话)来确定来自不同角度的环境光。 Intensity Multiplier:增强强度;设置场景中漫反射环境光的亮度,定义为0到8之间的值。默认值是1。 Ambient Mode:设置应用于场景中环境光的全局照明模式。只有当现场的实时照明和烘烤照明都启用时,这个属性才可用。 Realtime:实时计算和更新场景中的环境光。 Baked:预先计算和设置场景中的环境光,然后在运行。

4.Environment Reflections(环境反射:这些设置控制涉及到反射探针烘烤的全局设置,以及影响全局反射的设置。)

Source :指定使用skybox或cube map(立方体映射)进行反射效果。默认值是Skybox。 Skybox:选择此选项以使用skybox进行反射。如果选择Skybox,则会出现一个名为Resolution的附加选项。设置skybox的分辨率以进行反射。 Custom:选择cube map来进行反射。选择此选项可使用多维数据集映射进行反射。如果选择Custom,则会出现一个名为Cube map的附加选项。设置skybox的cube map以进行反射。 Compression:用这个定义反射纹理是否被压缩。默认设置是Auto。 Auto:如果压缩格式合适,则对反射纹理进行压缩。 Uncompressed:反射纹理存储在未压缩的内存中。 Compressed:纹理压缩。 Intensity Multiplier:反射源(在反射源属性中指定的天空盒或立方体图)在反射物中可见的程度。 Bounces:当一个对象的反射被另一个对象反射时,反射“反弹”发生。反射是通过反射探头在场景中捕捉到的。使用此属性设置反射探测在对象之间来回反射的次数。如果设置为1,那么Unity只考虑初始反射(来自反射源属性中指定的skybox或多维数据集映射)。 “Realtime Lighting”

Realtime Lighting 1.Realtime Global Illumination:实时渲染模式;一旦勾选,Unity会实时计算和更新光照。

“Mixed Lighting”

Mixed Lighting 1.Baked Global Illumination:烘焙渲染模式;一旦勾选,Unity会预先计算灯光,在运行时烘焙场景中的灯光。 2.Lighting Mode:灯光模式决定了在场景中混合灯光和阴影与游戏对象的工作方式。 注意:当你改变灯光模式时,你也需要重新烘焙场景。 3.Realtime Shadow Color:定义用于实时渲染阴影的颜色。设置仅在灯光模式设置为Subtractive时可用。

“Lightmapping Settings”

Lightmapping Settings Lightmapping设置特定于Lightmapper后端。与其他设置不同,它们不共享,并且有自己的参数。 1.Lightmapper:烘焙灯光的解决方案(烘焙主要依赖CPU)。 2.Indirect Resolution:间接光烘焙精度; 3.Lightmap Resolution:烘焙的精度;烘焙多少像素点到灯光贴图上。 4.Lightmap padding:UV间距(当烘焙后感觉光照效果不对,可以对此进行调节来确保烘焙的结果更加真实) 5.Lightmap Size:光照贴图的大小 6.Compress Lightmaps:是否压缩光照贴图 7.Ambient Occlusion:环境光遮蔽

Max Distance:设置值的大小来确定阴影的范围 Indirect Contribution: Direct Contribution:

8.Final Gather:最终聚集的信息(为了模拟一些物体的颜色反射到其他物体上,使得场景更加真实,细节更加细腻)(比较消耗性能)

Final Gather 勾选后两个相应的参数:

Ray Count:数值越大场景越细腻。

9.Directional Mode:灯光方向贴图;如果不选择,Global Maps这不会产生相关贴图

Global Maps 如图上的几个贴图分别是:

Intensity:存储灯光颜色信息(RGBA) Directionality:灯光方向贴图信息 一个灯光颜色贴图不足以渲染显示场景中各个物体应该显示的情况(凹凸情况等);还需要方向信息,但是将全部的信息放入到一个贴图,实在是太大了;所以选择使用两张贴图存放不同的信息。

Shadowmask:当选择Distance Shadowmask模式时,会产生这样一张贴图;主要记录相关阴影信息。

Shadowmask

10.Indirect Intensity:间接光的强度 11.Albedo Boost:提高反射率(防止曝光过高)

“Other Settings”

Other Settings 关于fog, Halos,Flares和Cookies的设置 1.Fog:雾;启用或禁用场景中的雾。注意Deferred rendering path下Fog不可用。对于延迟渲染,后期处理雾效应效果可能比较合适。 当勾选了Fog,则会出现三个参数:

Color:给场景中的雾 选择颜色。 Mode:定义雾化密度随相机距离的不同变化方式。 Linear:雾密度随距离线性增加。 -- Start:设置距离相机的距离,在那里雾开始。 -- End:设置与摄像机的距离,使雾 完全遮蔽场景游戏对象。 Exponential:雾密度随距离成指数增长 -- Density:用这个来控制雾的密度。随着密度的增加,雾 显得更浓。 Exponential Squared:雾密度随距离(指数和平方)增加得更快。 -- Density:用这个来控制雾的密度。随着密度的增加,雾 显得更浓。

2.Halo Texture:光晕纹理;设置你想要使用的纹理来围绕灯光绘制光圈。 3.Halo Strength:光晕强度;定义灯光周围光环的可见性,范围从0到1。 4.Flare Fade Speed:“耀斑退却速度;定义镜头闪光的时间(以秒为单位),在最初出现后从视图中淡出。默认设置为3”。 5.Flare Strength:耀斑强度;从0到1的值定义从灯光发出的透镜闪光的可见性。 6.Spot Cookie:设置你想用于聚光灯的Cookie texture。

“Debug settings”

帮助你调试场景的设置

Debug settings 1.Light Probe Visualization:可视化光探针;使用这个过滤器来过滤场景视图中显示的光线探头。默认值仅供选择使用。 选项如下:

Only Probes Used By Selection:选择只使用探测;只有影响当前选择的光探针才能在场景视图中显示出来。 All Probes No Cells:所有的光探测都在场景视图中显示出来。 All Probes With Cells:在场景视图中显示所有的光探针,并显示用于插值光探针数据的四面体。 None:在场景视图中不显示光探测。 Display Weights:显示重量;当勾选时,Unity从用于主动选择的光探针到用于插值的四面体上的位置画一条线。这是一种调试探测插值和位置问题的方法。 Display Occlusion :当被勾选时,如果混合模式是距离阴影遮罩或阴影遮罩,Unity会显示光探测的遮挡数据。 “Global maps tab区域”

使用Global maps选项卡查看照明系统使用的实际纹理。这些包括强度光地图,阴影遮罩和方向性地图。这只适用于烘焙照明或混合照明使用;预览是空白的实时照明。

Global maps tab “Object maps tab区域”

使用Object maps选项卡查看当前选中的* *GameObject的烘焙纹理预览,包括阴影遮罩。

Object maps tab

属性大概就是这些,可能中间有些错误(到时候发现再改);痛苦并快乐的过程~~~~~~

“个人吐槽”

针对GI的各方面的东东,做了一个Demo测试哈!!!有8个Scene,每个场景讲述不同的知识点。 1.Scene 01-Skybox 常用的两种创建Skybox的方式(后面两个不知道是啥,实在是没精力去看了):

Create Skybox

使用6 Sided渲染方式,分别添加6张不同方向的Texture。 使用Cubemap渲染方式,仅仅只需要一张cubemap的Texture。 注意:skybox的切换实际上就更换skybox的材质(Lighting-Skybox Material);在前面的Environment中看到过。 Skybox Material 注意:GameObject的Material上的两个属性与Skybox的反射联系 Material Metallic:金属性,当调节到1时,gameobject表面具有金属感。

Smoothness:光滑度,当调节到1时,gameobject表面比较光滑。 这里为什么突然说到关于material的两个属性呢?因为当Lighting Setting设置好以后,如果相关gameobject的这两个属性设置为1,则该gameobject就会反射周围的场景。

效果图

2.Scene 02-Light Split 场景中的灯光分解;对于新建场景的光照效果并不是某一种灯光造成的,实际上是由多个光照效果互相影响形成的。

仔细看AB两块区域的光照效果;按理说,都是接受了Directional Light,为啥显示的效果不同呢? 依次去掉这三个参数,将其设置为None或者Other;就会发现场景中AB区域慢慢变成一样的了。 效果图 说明:场景中的灯光实际上由上面标记的三个参数以及场景中的Directional Light组合造成的灯光效果。 GI = 直接光照+间接光照+环境光+反射光

3.Scene 03-Light Type 主要讲解下灯光的几种基本的类型(这个在2.Light里面有记录介绍) Directional Light:平行光,类似于太阳光(光照强度不会随着距离衰弱) Spot:点光源(区域直射) Point:点光源 Area:区域光 除开平行光的其他三种光源在场景中的渲染

效果图 关于在PlayerSettings下面光照渲染的两种模式Gamma和 Linear PlayerSettings 一般情况下都选择Linear,因为其渲染比Gamma好(前提:显卡支持;)。Area Light只对勾选Static的GameObject起作用; 注意:在烘焙过程中报错或烘焙完以后明显感觉到灯光有差异;查看相关模型的Generate Lightmap UVs 属性,对其进行勾选。(这样才能保证Unity将烘焙后的贴图信息正确的贴到相关模型上面)。 Unity官方关于二者的对比(Linear相比Gamma还是渲染的更加贴近于现实。) 对比

知识点说明:当一个灯光照射一个游戏模型时,没有产生阴影,可以从几方面入手查看

灯光是否支持阴影:

Quality设置下阴影是否开启

模型是否执行阴影

材质问题:有些shader具有透明效果,不会产生阴影

4.Scene 04-Light Mixed 两个光照技术:实时光照&烘焙光照

上面两个效果一般只会开启一个,节约性能。 烘焙光照:为了节省性能开销提前将场景的灯光信息烘焙成一张贴图,在运行时只需要将贴图贴到场景中static物体上即可。 全局光照:直接光照+间接光照(一次以上的照射,两次以上的反射) 混合模式光照下的三种模式 Subtractive模式:将静态物体烘焙成贴图,相关光照贴图信息存储在Global maps里面(可以查看);场景中动态gameobject只能受到一个主光源的影响。(如果有其他Realtime光源,动态gameobject并不会产生实时阴影)该模式效率高,但是效果相当差,并且没有高光效果。 如图:添加的Point光源并没有使得右边的Cube产生新的阴影 效果图 Shadowmask模式:相比如Subtractive模式,可以存储多种光源,可以让动态gameobject接受多个光源,产生多个影子。 场景例子:如果在烘焙好的场景中,某一个物体A需要从一个静态gameobject B的影子下面通过,正常情况下,A的表面光照效果应该会受到B的影子的影响变黑,但是在Shadowmask模式下却不变;一般处理的方式有两种:

灯光探照灯技术 选择Shadowmask的另外一个模式 在Quality中切换当前Shadowmask的另外一个模式: Distance Shadowmask(相比Shadowmask更加消耗性能,效率更低) Quality Shadow distance:表示距离摄像机40的范围内(场景中),灯光将是实时渲染的;超出这个范围,将使用烘焙好的贴图效果。 在这种模式下,可以实现上述案例效果。 对比切换模式前后 Shadow casters的值可以看到:当切换Distance Shadowmask模式,动态A闯过静态B的影子时相当于进行了实时灯光渲染。 效果图 一般情况会做一个触发检测,在一定范围内选择Distance Shadowmask模式,出这个范围切换到Shadowmask模式: Code Baked Indirect模式 只烘焙间接光,其他都是实时渲染;更加真实,也更加消耗性能。

Scene 05-Light Probe Group 灯光探针是将周围的灯光信息记录下来后,在运行时实时的将信息渲染到周围的物体上。

Light Probe Group:灯光探针组 创建Light Probe Group会看到在Scene中有8个小球;每个小球就是一个灯光探针;实时监测小球所在点的灯光颜色信息。 可以对小球进行复制 ,在一个场景中设置多个小球,进行丰富的灯光阴影设置。 效果图

Scene 06-Reflection Probe

Reflection Probe:反射探针 可以理解为将一定范围的static物体反射到gameobject上 如下图:当Gameobject的属性Reflection Probes设置为Off时则不受反射探针的影响。 效果图

Scene 07-Light Material Self

自发光材质是将材质的Emission属性勾选,然后调节光照颜色和强度,赋予给相关的gameobject即可。 效果图

Scene 08-Post-Processing Profile Post Processing Stack 屏幕后期处理

主要介绍一些属性:

Fog:雾 Antialiasing:抗锯齿;为了消除远处物体具有锯齿边的情况对其进行模糊效果。 Ambient Occlusion:环境光遮蔽;(这里是实时的;在lightmapping里面是烘焙好的) Screen Space Reflection:屏幕的空间反射;需要反射材质,会实时反射场景中的一些东西。 Depth Of Field:景深(类似于相机调焦) Motion Blur:运动模糊效果 Eye Adaptation:眼部适应 Bloom:游戏环境高光的地方会更加亮,产生泛光的效果(理解为增强版本光晕效果)。 Color Grading:颜色修正(校准);游戏环境整体颜色改变。 User Lut:(Look Up Texture)使用贴图 Chromatic Aberration:色差变换;一般配合Vignette使用 Grain:噪点 Vignette:镜头光晕效果 这个场景主要是介绍Post-Processing插件的一些效果;以前这是Unity的一个特效包;每一个特效一个脚本,现在内嵌到Unity里面去了,这个后处理对于游戏的画风比较重要。

这里还记录两个东西: 1.Camera下的几种渲染路径

Legacy Vertex Lit:顶点光照;模型细节无法渲染出来;不支持实时阴影。效率高,效果差,适合旧机器。 Forward:正向渲染,支持像素级别的渲染;只支持一个平行光的实时阴影;游戏物体受到的灯光渲染越多,渲染速度越慢。支持MSAA(抗锯齿) Deferred:延迟渲染;效果最好;同时支持多个灯光的实时阴影。

2.批处理Batches Draw Call是绘制图形的命令;由CPU传给GPU; 针对游戏的优化实际上是优化Draw Call的次数(减少其次数); 而Batches就是对Draw Call的一种优化方式

从上面批处理的概念引申出关于游戏优化的几个基本参数 4个重要的参数: FPS:游戏帧率(游戏运行稳定在60以上) Batches:批处理 Verts:Camera能够渲染到的顶点数(数量越少越好,这个值是实时渲染得到的) Shadow casters:实时渲染的阴影数(数量越少越好,这个值是实时渲染得到的)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有